/**
 * 
 */
package estadosDelEnvio;

import static org.junit.Assert.*;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.verify;

import org.junit.Before;
import org.junit.Test;

import estadosDelEnvio.EnProcesoDeEnvio;
import estadosDelEnvio.PendienteDeEnvio;
import exceptions.StatesException;

/**
 * @author Lucas Alan Silvestri
 *
 */
public class PendienteDeEnvioTest extends EstadoDeEnviosTest {

	/* (non-Javadoc)
	 * @see estadosDeEnvio.EstadoDeEnviosTest#setUp()
	 */
	@Before
	public void setUp() throws Exception {
		super.setUp();
		this.setSut(new PendienteDeEnvio());
	}

	/**
	 * este test demuestra que el estado
	 * efectivamente esta pendiente de envio.
	 */
	@Override
	@Test
	public void estoyPendienteDeEnvioTest(){
		assertEquals(true,this.getSut().estoyPendienteDeEnvio());
	}
	
	/**
	 * Este test demuestra que en esta etapa
	 * efectivamente se puede enviar un envio pagado.
	 * @throws StatesException
	 */
	@Override
	@Test
	public void enviarEnvioPagadoTest() throws StatesException{
		this.getSut().enviarEnvio(this.getEnvioPagado());
		verify(this.getEnvioPagado()).cambiarEstado(
				any(EnProcesoDeEnvio.class));
		
	}
	
	/**
	 * Este test demuestra que en esta etapa
	 * efectivamente se puede enviar un envio a pagar.
	 * @throws StatesException
	 */
	@Override
	@Test
	public void enviarEnvioAPagarTest() throws StatesException{
		this.getSut().enviarEnvio(this.getEnvioAPagar());
		verify(this.getEnvioAPagar()).cambiarEstado(
				any(EnProcesoDeEnvio.class));
	}

}
